home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / link.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-05-08  |  4.5 KB  |  126 lines

  1. /* Data structure for communication from the run-time dynamic linker for
  2.    loaded ELF shared objects.
  3.    Copyright (C) 1995-1999, 2000, 2001, 2004 Free Software Foundation, Inc.
  4.    This file is part of the GNU C Library.
  5.  
  6.    The GNU C Library is free software; you can redistribute it and/or
  7.    modify it under the terms of the GNU Lesser General Public
  8.    License as published by the Free Software Foundation; either
  9.    version 2.1 of the License, or (at your option) any later version.
  10.  
  11.    The GNU C Library is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.    Lesser General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU Lesser General Public
  17.    License along with the GNU C Library; if not, write to the Free
  18.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19.    02111-1307 USA.  */
  20.  
  21. #ifndef    _LINK_H
  22. #define    _LINK_H    1
  23.  
  24. #include <features.h>
  25. #include <elf.h>
  26. #include <dlfcn.h>
  27. #include <sys/types.h>
  28.  
  29. /* We use this macro to refer to ELF types independent of the native wordsize.
  30.    `ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'.  */
  31. #define ElfW(type)    _ElfW (Elf, __ELF_NATIVE_CLASS, type)
  32. #define _ElfW(e,w,t)    _ElfW_1 (e, w, _##t)
  33. #define _ElfW_1(e,w,t)    e##w##t
  34.  
  35. #include <bits/elfclass.h>        /* Defines __ELF_NATIVE_CLASS.  */
  36.  
  37. /* Rendezvous structure used by the run-time dynamic linker to communicate
  38.    details of shared object loading to the debugger.  If the executable's
  39.    dynamic section has a DT_DEBUG element, the run-time linker sets that
  40.    element's value to the address where this structure can be found.  */
  41.  
  42. struct r_debug
  43.   {
  44.     int r_version;        /* Version number for this protocol.  */
  45.  
  46.     struct link_map *r_map;    /* Head of the chain of loaded objects.  */
  47.  
  48.     /* This is the address of a function internal to the run-time linker,
  49.        that will always be called when the linker begins to map in a
  50.        library or unmap it, and again when the mapping change is complete.
  51.        The debugger can set a breakpoint at this address if it wants to
  52.        notice shared object mapping changes.  */
  53.     ElfW(Addr) r_brk;
  54.     enum
  55.       {
  56.     /* This state value describes the mapping change taking place when
  57.        the `r_brk' address is called.  */
  58.     RT_CONSISTENT,        /* Mapping change is complete.  */
  59.     RT_ADD,            /* Beginning to add a new object.  */
  60.     RT_DELETE        /* Beginning to remove an object mapping.  */
  61.       } r_state;
  62.  
  63.     ElfW(Addr) r_ldbase;    /* Base address the linker is loaded at.  */
  64.   };
  65.  
  66. /* This is the instance of that structure used by the dynamic linker.  */
  67. extern struct r_debug _r_debug;
  68.  
  69. /* This symbol refers to the "dynamic structure" in the `.dynamic' section
  70.    of whatever module refers to `_DYNAMIC'.  So, to find its own
  71.    `struct r_debug', a program could do:
  72.      for (dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn)
  73.        if (dyn->d_tag == DT_DEBUG)
  74.      r_debug = (struct r_debug *) dyn->d_un.d_ptr;
  75.    */
  76. extern ElfW(Dyn) _DYNAMIC[];
  77.  
  78. /* Structure describing a loaded shared object.  The `l_next' and `l_prev'
  79.    members form a chain of all the shared objects loaded at startup.
  80.  
  81.    These data structures exist in space used by the run-time dynamic linker;
  82.    modifying them may have disastrous results.  */
  83.  
  84. struct link_map
  85.   {
  86.     /* These first few members are part of the protocol with the debugger.
  87.        This is the same format used in SVR4.  */
  88.  
  89.     ElfW(Addr) l_addr;        /* Base address shared object is loaded at.  */
  90.     char *l_name;        /* Absolute file name object was found in.  */
  91.     ElfW(Dyn) *l_ld;        /* Dynamic section of the shared object.  */
  92.     struct link_map *l_next, *l_prev; /* Chain of loaded objects.  */
  93.   };
  94.  
  95. #ifdef __USE_GNU
  96.  
  97. struct dl_phdr_info
  98.   {
  99.     ElfW(Addr) dlpi_addr;
  100.     const char *dlpi_name;
  101.     const ElfW(Phdr) *dlpi_phdr;
  102.     ElfW(Half) dlpi_phnum;
  103.  
  104.     /* Note: the next two members were introduced after the first
  105.        version of this structure was available.  Check the SIZE
  106.        argument passed to the dl_iterate_phdr() callback to determine
  107.        whether or not they are provided.  */
  108.  
  109.     /* Incremented when a new object may have been added.  */
  110.     unsigned long long int dlpi_adds;
  111.     /* Incremented when an object may have been removed.  */
  112.     unsigned long long int dlpi_subs;
  113.   };
  114.  
  115. __BEGIN_DECLS
  116.  
  117. extern int dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
  118.                          size_t size, void *data),
  119.                 void *data);
  120.  
  121. __END_DECLS
  122.  
  123. #endif
  124.  
  125. #endif /* link.h */
  126.